package com.itheima.tlias.mapper;

import com.itheima.tlias.mapper.sql.DeptMapperSqlProvider;
import com.itheima.tlias.model.entity.Dept;
import org.apache.ibatis.annotations.*;

import java.util.List;

/**
 * @author Lee
 * @created 2024/4/7
 * @describtion
 */
@Mapper
public interface DeptMapper {
    /**
     * 根据部门id 更新部门信息
     *
     * @param dept 部门信息
     */
    @UpdateProvider(type = DeptMapperSqlProvider.class, method = "updateById")
    void updateById(Dept dept);

    /**
     * 根据部门id查询部门表返回部门信息
     *
     * @param id 部门id
     * @return 部门信息
     * @Param 注解作用： 正常方法参数在编译以后编译称类似 arg0 ,arg1,.. 形式
     * <p>
     * 为了便于mybatis占位符参数区分提供这个注解。
     * 当我们Mapper 接口中的方法参数超过2个以上见数据类型 （4类8种 +String）
     * 需要使用@Param 注解标记参数名称！
     */
    @SelectProvider(type = DeptMapperSqlProvider.class, method = "selectById")
    Dept selectById(@Param("id") Integer id);

    /**
     * 添加部门数据
     */
    @InsertProvider(type = DeptMapperSqlProvider.class, method = "inserDept")
    void inserDept(Dept dept);


    /**
     * 根据部门id删除部门信息
     *
     * @param id
     */

    @DeleteProvider(type = DeptMapperSqlProvider.class, method = "deleteById")
    void deleteById(Integer id);

    /**
     * 查询所有的列表信息
     */

    @SelectProvider(type = DeptMapperSqlProvider.class, method = "selectDepts")
    List<Dept> selectDepts();


}
